從反應式到規劃式
在代理設計的演進過程中,我們從 反應式代理,它們根據簡單規則將感知直接映射到動作(例如,「如果前方的汽車煞車,則啟動煞車」),轉變為 問題解決代理。反應式代理僅依賴即時的上下文,而問題解決代理則具備 目標導向。它們會考慮其動作的未來後果,以找到能夠滿足特定目標的動作序列。
- 反應式代理: $Action = Function(Percept)$
- 規劃式代理: $Action\_Sequence = Search(State, Goal)$
原子狀態表示法
在此基本層級,代理使用 原子表示法。這表示世界的狀態被視為一個黑盒子——一個沒有內部結構可供搜尋演算法看到的單一節點。代理僅進行以下推理:
- 狀態 ($S$): 環境的快照。
- 動作 ($A$): 狀態之間的轉換。
- 目標測試: 檢查狀態 $s \in S_{goal}$ 的布林值。
問題解決循環
問題解決代理遵循一個獨特的四步驟循環來導覽環境:
- 目標制定: 根據目前情況決定要追求的目標。
- 問題制定: 將真實世界抽象化為數學模型(狀態與動作)。
- 搜尋: 模擬動作序列以找到 最佳路徑。
- 執行: 在搜尋階段找到動作後,無需進一步的審議即可執行(假設環境是靜態的)。
Python 實作 (agent_types.py)
1
class ReflexAgent:
2
defact( self, percept):
3
# 直接映射:規則 -> 動作
4
return rules.get(percept, default_action)
5
6
class ProblemSolvingAgent:
7
def__init__( self):
8
self.seq = [] # 快取動作序列
9
10
defact( self, percept):
11
# 如果我們正在執行中,請繼續
12
ifself.seq:
13
returnself.seq.pop( 0 )
14
15
# 否則,規劃(搜尋)
16
state = self。update_state(percept)
17
goal = self。formulate_goal(state)
18
problem = self。formulate_problem(state, goal)
19
20
# 搜尋傳回動作列表
21
self.seq = search_algorithm(problem)
22
23
returnself.seq.pop( 0 )